/*******************************************************************************************
 *      @name   font.c
 *      @brief  这是一个使用FreeType库的接口实现在LCD上显示汉字的代码案例
 *      @date   2025/01/16
 *      @author: boluzs@163.com
 *      @note
 *              1.需要把libfont.a和源文件xxx.c一起进行编译
 *              2.需要在源文件xxx.c中包含头文件 #include “font.h”
 *              3.输出框和字体颜色应该调用libfont.a库文件中的getColor函数 getColor(A,B,G,R)
 *      @version  1.0.0
 *
 *      Copyright (c) 2025 by boluzs@163.com, All Rights Reserved.
 *
 * ****************************************************************************************/
#include "main.h"
#include "font.h"
#include "menu.h"
#include "bmp.h"

int Show_Font(unsigned int fontSize, u32 width, u32 height,
              u32 byteperpixel, color buf_c, s32 x, s32 y,
              char *text, color font_c, s32 maxWidth, int px, int py)
{
    fontSetSize(pft, fontSize);                                            // 字体大小
    bitmap *bm = createBitmapWithInit(width, height, byteperpixel, buf_c); // 申请缓存
    fontPrint(pft, bm, x, y, text, font_c, maxWidth);                      // 加载字体
    // show_font_to_lcd(lcd_mp, 0, 0, bm);                                    // 刷新缓存
    show_font_to_lcd(lcd_buf, px, py, bm); // 刷新缓存
    destroyBitmap(bm);                     // 释放输出框内存
    return 0;
}

// 显示弹窗函数
bool Show_Info_Popup(const char *message, const char *buttonText)
{
    // 弹窗的尺寸和位置
    int popup_width = 240;  // 弹窗宽度280,160-280+240,160+160
    int popup_height = 160; // 弹窗高度
    int popup_x = 280;      // X坐标居中
    int popup_y = 160;      // Y坐标居中

    // 按钮的尺寸和位置
    int button_width = 100;
    int button_height = 50;
    int button_x = 350; // 350,250-350+100,250+50
    int button_y = 250;

    // 创建弹窗背景
    bitmap *popupBg = createBitmapWithInit(popup_width, popup_height, 4, getColor(0, 255, 158, 60)); // elementUI主题
    if (popupBg == NULL)
    {
        printf("弹窗背景创建失败\n");
        return false;
    }

    // 在弹窗中绘制提示文字
    fontSetSize(pft, 30); // 设置字体大小
    fontPrint(pft, popupBg, 50, 50, (char *)message, getColor(0, 255, 255, 255), popup_width);

    // 创建按钮背景
    bitmap *buttonBg = createBitmapWithInit(button_width, button_height, 4, getColor(0, 255, 158, 60)); // elementUI主题
    if (buttonBg == NULL)
    {
        printf("按钮背景创建失败\n");
        destroyBitmap(popupBg);
        return false;
    }

    // 在按钮中绘制文字
    fontSetSize(pft, 20); // 设置字体大小
    fontPrint(pft, buttonBg, 20, 15, (char *)buttonText, getColor(0, 255, 255, 255), button_width);

    // 将弹窗背景绘制到屏幕
    show_font_to_lcd(lcd_buf, popup_x, popup_y, popupBg);    // 将弹窗绘制到屏幕
    show_font_to_lcd(lcd_buf, button_x, button_y, buttonBg); // 将按钮绘制到屏幕
    Lcd_Refresh(lcd_mp, lcd_buf);
    // 等待用户点击确认按钮
    while (1)
    {
        if (Is_Touch_In_Area(button_x, button_x + button_width, button_y, button_y + button_height))
        {
            printf("确认按钮被点击\n");
            // 释放资源
            destroyBitmap(popupBg);
            destroyBitmap(buttonBg);
            return true;
        }
    }
    // 释放资源
    destroyBitmap(popupBg);
    destroyBitmap(buttonBg);
    return false;
}

// 显示选择弹窗函数
int Show_Choose_Popup(const char *message, const char *buttonText1, const char *buttonText2)
{
    // 弹窗的尺寸和位置
    int popup_width = 300;  // 弹窗宽度280,160-280+240,160+160
    int popup_height = 250; // 弹窗高度
    int popup_x = 250;      // X坐标居中
    int popup_y = 115;      // Y坐标居中

    // 按钮的尺寸和位置
    int button_width = 100;
    int button_height = 40;
    int button_x1 = 275; // 350,250-350+100,250+50
    int button_y1 = 325;
    int button_x2 = 425; // 350,250-350+100,250+50
    int button_y2 = 325;

    // 创建弹窗背景
    bitmap *popupBg = createBitmapWithInit(popup_width, popup_height, 4, getColor(0, 255, 158, 60)); // elementUI主题
    if (popupBg == NULL)
    {
        printf("弹窗背景创建失败\n");
        return 0;
    }

    // 在弹窗中绘制提示文字
    fontSetSize(pft, 30); // 设置字体大小
    fontPrint(pft, popupBg, 40, 100, (char *)message, getColor(0, 255, 255, 255), popup_width);

    // 创建按钮背景
    bitmap *buttonBg1 = createBitmapWithInit(button_width, button_height, 4, getColor(0, 255, 158, 60)); // elementUI主题
    bitmap *buttonBg2 = createBitmapWithInit(button_width, button_height, 4, getColor(0, 255, 158, 60)); // elementUI主题

    // 在按钮中绘制文字
    fontSetSize(pft, 20); // 设置字体大小
    fontPrint(pft, buttonBg1, 20, 15, (char *)buttonText1, getColor(0, 255, 255, 255), button_width);
    fontPrint(pft, buttonBg2, 20, 15, (char *)buttonText2, getColor(0, 255, 255, 255), button_width);

    // 将弹窗背景绘制到屏幕
    show_font_to_lcd(lcd_buf, popup_x, popup_y, popupBg);       // 将弹窗绘制到屏幕
    show_font_to_lcd(lcd_buf, button_x1, button_y1, buttonBg1); // 将按钮绘制到屏幕
    show_font_to_lcd(lcd_buf, button_x2, button_y2, buttonBg2); // 将按钮绘制到屏幕
    Lcd_Refresh(lcd_mp, lcd_buf);
    // 等待用户点击确认按钮
    while (1)
    {
        if (Is_Touch_In_Area(button_x1, button_x1 + button_width, button_y1, button_y1 + button_height))
        {
            printf("左边的按钮被点击\n");
            // 释放资源
            destroyBitmap(popupBg);
            destroyBitmap(buttonBg1);
            destroyBitmap(buttonBg2);
            return 1;
        }
        if (Is_Touch_In_Area(button_x2, button_x2 + button_width, button_y2, button_y2 + button_height))
        {
            printf("右边的按钮被点击\n");
            // 释放资源
            destroyBitmap(popupBg);
            destroyBitmap(buttonBg1);
            destroyBitmap(buttonBg2);
            return 2;
        }
    }
    // 释放资源
    destroyBitmap(popupBg);
    destroyBitmap(buttonBg1);
    destroyBitmap(buttonBg2);
    return 0;
}

bool Show_Img_Popup(const char *img_path, const char *buttonText)
{
    // 弹窗的尺寸和位置
    int popup_width = 300;  // 弹窗宽度280,160-280+240,160+160
    int popup_height = 250; // 弹窗高度
    int popup_x = 250;      // X坐标居中
    int popup_y = 115;      // Y坐标居中

    // 按钮的尺寸和位置
    int button_width = 100;
    int button_height = 40;
    int button_x = 350; // 350,250-350+100,250+50
    int button_y = 325;

    // 创建弹窗背景
    bitmap *popupBg = createBitmapWithInit(popup_width, popup_height, 4, getColor(0, 255, 158, 60)); // elementUI主题
    if (popupBg == NULL)
    {
        printf("弹窗背景创建失败\n");
        return false;
    }

    // 创建按钮背景
    bitmap *buttonBg = createBitmapWithInit(button_width, button_height, 4, getColor(0, 255, 158, 60)); // elementUI主题
    if (buttonBg == NULL)
    {
        printf("按钮背景创建失败\n");
        destroyBitmap(popupBg);
        return false;
    }

    // 在按钮中绘制文字
    fontSetSize(pft, 20); // 设置字体大小
    fontPrint(pft, buttonBg, 20, 15, (char *)buttonText, getColor(0, 255, 255, 255), button_width);

    // 将弹窗背景绘制到屏幕
    show_font_to_lcd(lcd_buf, popup_x, popup_y, popupBg);    // 将弹窗绘制到屏幕
    Bmp_Show((char *)img_path, lcd_buf, 320, 165);           // 在弹窗中绘制图片
    show_font_to_lcd(lcd_buf, button_x, button_y, buttonBg); // 将按钮绘制到屏幕
    Lcd_Refresh(lcd_mp, lcd_buf);
    // 等待用户点击确认按钮
    while (1)
    {
        if (Is_Touch_In_Area(button_x, button_x + button_width, button_y, button_y + button_height))
        {
            printf("确认按钮被点击\n");
            // 释放资源
            destroyBitmap(popupBg);
            destroyBitmap(buttonBg);
            return true;
        }
    }
    // 释放资源
    destroyBitmap(popupBg);
    destroyBitmap(buttonBg);
    return false;
}
